BNE2 Tips(改造ヒント集)
FAQのノリで、使いこなしのコツなど書き加えていってください。
間違いを見つけた人は遠慮なく訂正するでち。
間違いを見つけた人は遠慮なく訂正するでち。
- セル幅の調節を保存するには、ファイル→設定の保存
- データの表示形式を変えたい場合、表示→選択セクションの表示
表示形式を変えた後、ファイル→設定の保存 を行うと、
INIファイルが上書きされる。
INIファイルが上書きされる。
- 複数のセルをまとめてコピーしたいとき
リスト形式のセクションの表示形式を
数値表示(16進,10進数)に変えておくとスムーズ。
キーボード編集派の人にもオススメ。
セルを選択後にメニューの「表示」→「選択セクションの表示」
数値表示(16進,10進数)に変えておくとスムーズ。
キーボード編集派の人にもオススメ。
セルを選択後にメニューの「表示」→「選択セクションの表示」
- BNE2は同時に複数起動できます。
ROMから別のROMへデータをコピー&ペーストするもよし、
ROMとRAMを両方参照しながら解析するもよし。
ROMとRAMを両方参照しながら解析するもよし。
- ROM/RAM設定する前にうっかりファイルを開いてしまっても、
その他→設定でRom/Ramの切り替えが出来る
(ファイルは再読み込みされる)
(ファイルは再読み込みされる)
- BNE2を開いたままでもINIファイルを編集できる。
INIファイルをエディタで編集して上書き保存した後、
ROMなどを再読み込み or BNE2を起動しなおすと、設定が反映される。
ROMなどを再読み込み or BNE2を起動しなおすと、設定が反映される。
- テストプレイ用にエミュ設定
ステートセーブ、加速機能などのショートカットキーを
使いやすいようにカスタマイズしておくと効率が良いです
多ボタンのパッドがあるなら、パッドのボタンに設定する手も
使いやすいようにカスタマイズしておくと効率が良いです
多ボタンのパッドがあるなら、パッドのボタンに設定する手も
- ステートセーブの活用
SNESGT/ZSNESのステートセーブをBNE2で直接開いて、
知りたい項目の数値を調べると便利
(例えば、店に行かなくても所持金の増減が分かる)
RAM用のiniに書かれているアドレスはメモリアドレス、
つまり改造コードと同じ
知りたい項目の数値を調べると便利
(例えば、店に行かなくても所持金の増減が分かる)
RAM用のiniに書かれているアドレスはメモリアドレス、
つまり改造コードと同じ
- SNESGTの「メモリビューア」が地味に便利
「オプション」→「ツール」→「メモリビューア」
見たいアドレスまでスクロールするのが大変ではありますが、
メモリの変化がリアルタイムに見られるので、
その処理に使われているメモリがどこなのか一瞬で分かります。
コードサーチ機能は無いですが、実はメモリへの書き込みも
出来るので、アドレスが分かっている場合のコード検証には便利です。
(ステータス画面などの場合、一度画面を切り替えないと
値の表示には反映されないので注意)
見たいアドレスまでスクロールするのが大変ではありますが、
メモリの変化がリアルタイムに見られるので、
その処理に使われているメモリがどこなのか一瞬で分かります。
コードサーチ機能は無いですが、実はメモリへの書き込みも
出来るので、アドレスが分かっている場合のコード検証には便利です。
(ステータス画面などの場合、一度画面を切り替えないと
値の表示には反映されないので注意)
- SNESGTのステートセーブをStirlingなどバイナリエディタで
直接開いた場合、ファイル先頭44hバイトを削除すれば
メモリアドレスと一致する
あるいは、メモリアドレス+44hの場所を見る
(BNE2は、初めから先頭44hを飛ばして読む設定になっています)
メモリアドレスと一致する
あるいは、メモリアドレス+44hの場所を見る
(BNE2は、初めから先頭44hを飛ばして読む設定になっています)
- 通常セーブ(.srm)およびSnes9x系のステートセーブの形式については、良く分かりません。情報求む。
- 進数表記と略号
h:16進数 (hexadecimal) b:2進数 (binary) d:10進数 (decimal) (進数指定が省略されている場合は10進数のことが多い)
0xFF=FFh=FF(h)= 1111 1111(b) =255(d) 0x100=256 0xFFFF=65535 0x10000=65536
0x63= 99 0x64=100 0x03E7= 999 ROM/RAM内では E7 03 (例外あり) 0x03E8=1000 ROM/RAM内では E8 03 (例外あり)
+1h= 0000 0001(b) =0bit(.0) = 1 = 2^0 +2h= 0000 0010(b) =1bit(.1) = 2 = 2^1 +4h= 0000 0100(b) =2bit(.2) = 4 = 2^2 +8h= 0000 1000(b) =3bit(.3) = 8 = 2^3 +10h= 0001 0000(b) =4bit(.4) = 16 = 2^4 +20h= 0010 0000(b) =5bit(.5) = 32 = 2^5 +40h= 0100 0000(b) =6bit(.6) = 64 = 2^6 +80h= 1000 0000(b) =7bit(.7) =128 = 2^7 +100h=0001 0000 0000(b) =8bit =256 = 2^8
XXh:1Bite= 8bit (0~255) or (-128~0~+127) XX YYh:2Bite=16bit (0~65535) or (-32768~0~+32767)
- 16進数、10進数、2進数の変換や計算には
Windows付属の電卓機能が便利。
スタート→プログラム→アクセサリ→電卓
「表示」→「関数電卓」にしてみよう。
スタート→プログラム→アクセサリ→電卓
「表示」→「関数電卓」にしてみよう。
- ビット指定、ビットフィルタの意味
16進数 XY(h)= pqrs tuvw(b) 2進数
例 7A(h)= 0111 1010(b) p:7bit q:6bit r:5bit s:4bit t:3bit u:2bit v:1bit w:0bit
【例1】
聖剣伝説3、RAM上での精霊取得フラグ(手持ち.ini)
メモリアドレス7FEECFに1バイト XY(h)で記述されています
2進数に直したとき、それぞれの桁が0なら
該当する精霊をまだ得ていないということで、
その桁が1なら、該当する精霊を得たというフラグです
聖剣伝説3、RAM上での精霊取得フラグ(手持ち.ini)
メモリアドレス7FEECFに1バイト XY(h)で記述されています
2進数に直したとき、それぞれの桁が0なら
該当する精霊をまだ得ていないということで、
その桁が1なら、該当する精霊を得たというフラグです
w=1:ノームを得た (0bit→ビット指定.0) v=1:ジンを得た (1bit→ビット指定.1) u=1:ウンディーネを得た (2bit→ビット指定.2) t=1:サラマンダーを得た (3bit→ビット指定.3) s=1:シェイドを得た (4bit→ビット指定.4) r=1:ウィスプを得た (5bit→ビット指定.5) q=1:ルナを得た (6bit→ビット指定.6) p=1:ドリアードを得た (7bit→ビット指定.7)
(精霊が8種類→8bit=1バイトに収まる)
ノーム、ウンディーネ、シェイド、ウィスプを得ている 0011 0101(b)= 35(h) ※桁の対応に注意
全精霊を得ている 1111 1111(b)= FF(h)
したがって、それぞれの精霊取得フラグを
独立した項目で表示させるには、以下のようになります
セクション名(「ノーム」など)の次の項目がビット指定です。
独立した項目で表示させるには、以下のようになります
セクション名(「ノーム」など)の次の項目がビット指定です。
7FEECF,ノーム,.0,,1,0,,900,,0 |1 Get
7FEECF,ジン,.1,,1,0,,900,,0 |1 Get
7FEECF,ウンディーネ,.2,,1,0,,900,,0 |1 Get
7FEECF,サラマンダー,.3,,1,0,,900,,0 |1 Get
7FEECF,シェイド,.4,,1,0,,900,,0 |1 Get
7FEECF,ウィスプ,.5,,1,0,,900,,0 |1 Get
7FEECF,ルナ,.6,,1,0,,900,,0 |1 Get
7FEECF,ドリアード,.7,,1,0,,900,,0 |1 Get
7FEECF,ジン,.1,,1,0,,900,,0 |1 Get
7FEECF,ウンディーネ,.2,,1,0,,900,,0 |1 Get
7FEECF,サラマンダー,.3,,1,0,,900,,0 |1 Get
7FEECF,シェイド,.4,,1,0,,900,,0 |1 Get
7FEECF,ウィスプ,.5,,1,0,,900,,0 |1 Get
7FEECF,ルナ,.6,,1,0,,900,,0 |1 Get
7FEECF,ドリアード,.7,,1,0,,900,,0 |1 Get
【例2】
上位2ビットで「方向」を指定
p=0:右 1:左
q=0:上 1:下
上位2ビットで「方向」を指定
p=0:右 1:左
q=0:上 1:下
下位6ビットで「移動距離」を指定
rstuvw(b)=r*32+s*16+t*8+u*4+v*2+w*1=移動距離
rstuvw(b)=r*32+s*16+t*8+u*4+v*2+w*1=移動距離
という形式のデータがあるとき
方向の左右だけ知りたい→ビット指定 .7 (pだけ取得、値=0 or 1)
移動距離が奇数か偶数か知りたい
→ビット指定 .0 (wだけ取得、値=0 or 1)
移動距離が32以上/未満の判定を知りたい
→ビット指定 .5 (rだけ取得、値=0 or 1)
移動距離が奇数か偶数か知りたい
→ビット指定 .0 (wだけ取得、値=0 or 1)
移動距離が32以上/未満の判定を知りたい
→ビット指定 .5 (rだけ取得、値=0 or 1)
移動距離だけ知りたい→ビットフィルタ .3F
(下位6ビットを取得して数値として出力、値=0~63)
取得したいビットの桁を1にした2進数は 00111111(2)=3F(h)なので
ビットフィルタは.3Fになる。
(下位6ビットを取得して数値として出力、値=0~63)
取得したいビットの桁を1にした2進数は 00111111(2)=3F(h)なので
ビットフィルタは.3Fになる。
上下左右の方向を一度に取得したい→ビットフィルタ .C0
(上位2ビットを取得して数値として出力、値=[0,64,128,192])
取得したいビットの桁を1にした2進数は 11000000(2)=C0(h)なので
ビットフィルタは .C0になる。
得られた値を÷64(ビットシフト)すれば、[0,1,2,3]の形式になる。@wikiへ
(上位2ビットを取得して数値として出力、値=[0,64,128,192])
取得したいビットの桁を1にした2進数は 11000000(2)=C0(h)なので
ビットフィルタは .C0になる。
得られた値を÷64(ビットシフト)すれば、[0,1,2,3]の形式になる。@wikiへ